package com.springboot.news.domain.vo;
import com.baomidou.mybatisplus.core.metadata.IPage;
import lombok.Data;
import org.springframework.beans.BeanUtils;
import org.springframework.util.CollectionUtils;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.function.Function;
import java.util.stream.Collectors;

/**
 * @author hongfayang
 * @date 2023/01/06
 */
@Data
public class PageableVO<E> {
    /**
     * 总数
     */
    protected Long total = 0L;

    /**
     * 每页显示条数
     */
    protected Long size = 10L;

    /**
     * 当前页
     */
    protected Long current = 1L;

    protected List<E> list = Collections.EMPTY_LIST;

    public static <E, T> PageableVO<E> fromPageRaw(IPage<T> page, Function<? super T, ? extends E> mapper) {
        if (null == page || null == mapper) {
            return null;
        }
        List<T> records = page.getRecords();
        List<E> dataList = new ArrayList<>();
        if (!CollectionUtils.isEmpty(records)) {
            dataList = records.stream()
                    .map(mapper)
                    .collect(Collectors.toList());
        }
        PageableVO<E> pageableVO = new PageableVO<>();
        BeanUtils.copyProperties(page, pageableVO);
        pageableVO.setList(dataList);
        return pageableVO;
    }

    public static <E> PageableVO<E> fromPageRaw(IPage<E> page) {
        if (null == page) {
            return null;
        }
        PageableVO<E> pageableVO = new PageableVO<>();
        BeanUtils.copyProperties(page, pageableVO);
        pageableVO.setList(page.getRecords());
        return pageableVO;
    }

}
